/*
 * Copyright (c) 2004-2006 Derelict Developers
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 * * Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 * * Redistributions in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 *
 * * Neither the names 'Derelict', 'DerelictGL', nor the names of its contributors
 *   may be used to endorse or promote products derived from this software
 *   without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
module derelict.opengl.glfuncs;

private
{
    import derelict.opengl.gltypes;
    import derelict.util.loader;
}

version(linux)
    version = NotWindows;
else version(darwin)
    version = NotWindows;
else version(Unix)
    version = NotWindows;

package SharedLib glLib;

package void loadGL(SharedLib lib)
{
    /+// if not on windows, save the lib handle for loading versions greater
    // than 1.1
    version(NotWindows)+/
        glLib = lib;

    // gl 1.0
    bindFunc(glClearIndex)("glClearIndex", lib);
    bindFunc(glClearColor)("glClearColor", lib);
    bindFunc(glClear)("glClear", lib);
    bindFunc(glIndexMask)("glIndexMask", lib);
    bindFunc(glColorMask)("glColorMask", lib);
    bindFunc(glAlphaFunc)("glAlphaFunc", lib);
    bindFunc(glBlendFunc)("glBlendFunc", lib);
    bindFunc(glLogicOp)("glLogicOp", lib);
    bindFunc(glCullFace)("glCullFace", lib);
    bindFunc(glFrontFace)("glFrontFace", lib);
    bindFunc(glPointSize)("glPointSize", lib);
    bindFunc(glLineWidth)("glLineWidth", lib);
    bindFunc(glLineStipple)("glLineStipple", lib);
    bindFunc(glPolygonMode)("glPolygonMode", lib);
    bindFunc(glPolygonOffset)("glPolygonOffset", lib);
    bindFunc(glPolygonStipple)("glPolygonStipple", lib);
    bindFunc(glGetPolygonStipple)("glGetPolygonStipple", lib);
    bindFunc(glEdgeFlag)("glEdgeFlag", lib);
    bindFunc(glEdgeFlagv)("glEdgeFlagv", lib);
    bindFunc(glScissor)("glScissor", lib);
    bindFunc(glClipPlane)("glClipPlane", lib);
    bindFunc(glGetClipPlane)("glGetClipPlane", lib);
    bindFunc(glDrawBuffer)("glDrawBuffer", lib);
    bindFunc(glReadBuffer)("glReadBuffer", lib);
    bindFunc(glEnable)("glEnable", lib);
    bindFunc(glDisable)("glDisable", lib);
    bindFunc(glIsEnabled)("glIsEnabled", lib);
    bindFunc(glEnableClientState)("glEnableClientState", lib);
    bindFunc(glDisableClientState)("glDisableClientState", lib);
    bindFunc(glGetBooleanv)("glGetBooleanv", lib);
    bindFunc(glGetDoublev)("glGetDoublev", lib);
    bindFunc(glGetFloatv)("glGetFloatv", lib);
    bindFunc(glGetIntegerv)("glGetIntegerv", lib);
    bindFunc(glPushAttrib)("glPushAttrib", lib);
    bindFunc(glPopAttrib)("glPopAttrib", lib);
    bindFunc(glPushClientAttrib)("glPushClientAttrib", lib);
    bindFunc(glPopClientAttrib)("glPopClientAttrib", lib);
    bindFunc(glRenderMode)("glRenderMode", lib);
    bindFunc(glGetError)("glGetError", lib);
    bindFunc(glGetString)("glGetString", lib);
    bindFunc(glFinish)("glFinish", lib);
    bindFunc(glFlush)("glFlush", lib);
    bindFunc(glHint)("glHint", lib);
    bindFunc(glClearDepth)("glClearDepth", lib);
    bindFunc(glDepthFunc)("glDepthFunc", lib);
    bindFunc(glDepthMask)("glDepthMask", lib);
    bindFunc(glDepthRange)("glDepthRange", lib);
    bindFunc(glClearAccum)("glClearAccum", lib);
    bindFunc(glAccum)("glAccum", lib);
    bindFunc(glMatrixMode)("glMatrixMode", lib);
    bindFunc(glOrtho)("glOrtho", lib);
    bindFunc(glFrustum)("glFrustum", lib);
    bindFunc(glViewport)("glViewport", lib);
    bindFunc(glPushMatrix)("glPushMatrix", lib);
    bindFunc(glPopMatrix)("glPopMatrix", lib);
    bindFunc(glLoadIdentity)("glLoadIdentity", lib);
    bindFunc(glLoadMatrixd)("glLoadMatrixd", lib);
    bindFunc(glLoadMatrixf)("glLoadMatrixf", lib);
    bindFunc(glMultMatrixd)("glMultMatrixd", lib);
    bindFunc(glMultMatrixf)("glMultMatrixf", lib);
    bindFunc(glRotated)("glRotated", lib);
    bindFunc(glRotatef)("glRotatef", lib);
    bindFunc(glScaled)("glScaled", lib);
    bindFunc(glScalef)("glScalef", lib);
    bindFunc(glTranslated)("glTranslated", lib);
    bindFunc(glTranslatef)("glTranslatef", lib);
    bindFunc(glIsList)("glIsList", lib);
    bindFunc(glDeleteLists)("glDeleteLists", lib);
    bindFunc(glGenLists)("glGenLists", lib);
    bindFunc(glNewList)("glNewList", lib);
    bindFunc(glEndList)("glEndList", lib);
    bindFunc(glCallList)("glCallList", lib);
    bindFunc(glCallLists)("glCallLists", lib);
    bindFunc(glListBase)("glListBase", lib);
    bindFunc(glBegin)("glBegin", lib);
    bindFunc(glEnd)("glEnd", lib);
    bindFunc(glVertex2d)("glVertex2d", lib);
    bindFunc(glVertex2f)("glVertex2f", lib);
    bindFunc(glVertex2i)("glVertex2i", lib);
    bindFunc(glVertex2s)("glVertex2s", lib);
    bindFunc(glVertex3d)("glVertex3d", lib);
    bindFunc(glVertex3f)("glVertex3f", lib);
    bindFunc(glVertex3i)("glVertex3i", lib);
    bindFunc(glVertex3s)("glVertex3s", lib);
    bindFunc(glVertex4d)("glVertex4d", lib);
    bindFunc(glVertex4f)("glVertex4f", lib);
    bindFunc(glVertex4i)("glVertex4i", lib);
    bindFunc(glVertex4s)("glVertex4s", lib);
    bindFunc(glVertex2dv)("glVertex2dv", lib);
    bindFunc(glVertex2fv)("glVertex2fv", lib);
    bindFunc(glVertex2iv)("glVertex2iv", lib);
    bindFunc(glVertex2sv)("glVertex2sv", lib);
    bindFunc(glVertex3dv)("glVertex3dv", lib);
    bindFunc(glVertex3fv)("glVertex3fv", lib);
    bindFunc(glVertex3iv)("glVertex3iv", lib);
    bindFunc(glVertex3sv)("glVertex3sv", lib);
    bindFunc(glVertex4dv)("glVertex4dv", lib);
    bindFunc(glVertex4fv)("glVertex4fv", lib);
    bindFunc(glVertex4iv)("glVertex4iv", lib);
    bindFunc(glVertex4sv)("glVertex4sv", lib);
    bindFunc(glNormal3b)("glNormal3b", lib);
    bindFunc(glNormal3d)("glNormal3d", lib);
    bindFunc(glNormal3f)("glNormal3f", lib);
    bindFunc(glNormal3i)("glNormal3i", lib);
    bindFunc(glNormal3s)("glNormal3s", lib);
    bindFunc(glNormal3bv)("glNormal3bv", lib);
    bindFunc(glNormal3dv)("glNormal3dv", lib);
    bindFunc(glNormal3fv)("glNormal3fv", lib);
    bindFunc(glNormal3iv)("glNormal3iv", lib);
    bindFunc(glNormal3sv)("glNormal3sv", lib);
    bindFunc(glIndexd)("glIndexd", lib);
    bindFunc(glIndexf)("glIndexf", lib);
    bindFunc(glIndexi)("glIndexi", lib);
    bindFunc(glIndexs)("glIndexs", lib);
    bindFunc(glIndexub)("glIndexub", lib);
    bindFunc(glIndexdv)("glIndexdv", lib);
    bindFunc(glIndexfv)("glIndexfv", lib);
    bindFunc(glIndexiv)("glIndexiv", lib);
    bindFunc(glIndexsv)("glIndexsv", lib);
    bindFunc(glIndexubv)("glIndexubv", lib);
    bindFunc(glColor3b)("glColor3b", lib);
    bindFunc(glColor3d)("glColor3d", lib);
    bindFunc(glColor3f)("glColor3f", lib);
    bindFunc(glColor3i)("glColor3i", lib);
    bindFunc(glColor3s)("glColor3s", lib);
    bindFunc(glColor3ub)("glColor3ub", lib);
    bindFunc(glColor3ui)("glColor3ui", lib);
    bindFunc(glColor3us)("glColor3us", lib);
    bindFunc(glColor4b)("glColor4b", lib);
    bindFunc(glColor4d)("glColor4d", lib);
    bindFunc(glColor4f)("glColor4f", lib);
    bindFunc(glColor4i)("glColor4i", lib);
    bindFunc(glColor4s)("glColor4s", lib);
    bindFunc(glColor4ub)("glColor4ub", lib);
    bindFunc(glColor4ui)("glColor4ui", lib);
    bindFunc(glColor4us)("glColor4us", lib);
    bindFunc(glColor3bv)("glColor3bv", lib);
    bindFunc(glColor3dv)("glColor3dv", lib);
    bindFunc(glColor3fv)("glColor3fv", lib);
    bindFunc(glColor3iv)("glColor3iv", lib);
    bindFunc(glColor3sv)("glColor3sv", lib);
    bindFunc(glColor3ubv)("glColor3ubv", lib);
    bindFunc(glColor3uiv)("glColor3uiv", lib);
    bindFunc(glColor3usv)("glColor3usv", lib);
    bindFunc(glColor4bv)("glColor4bv", lib);
    bindFunc(glColor4dv)("glColor4dv", lib);
    bindFunc(glColor4fv)("glColor4fv", lib);
    bindFunc(glColor4iv)("glColor4iv", lib);
    bindFunc(glColor4sv)("glColor4sv", lib);
    bindFunc(glColor4ubv)("glColor4ubv", lib);
    bindFunc(glColor4uiv)("glColor4uiv", lib);
    bindFunc(glColor4usv)("glColor4usv", lib);
    bindFunc(glTexCoord1d)("glTexCoord1d", lib);
    bindFunc(glTexCoord1f)("glTexCoord1f", lib);
    bindFunc(glTexCoord1i)("glTexCoord1i", lib);
    bindFunc(glTexCoord1s)("glTexCoord1s", lib);
    bindFunc(glTexCoord2d)("glTexCoord2d", lib);
    bindFunc(glTexCoord2f)("glTexCoord2f", lib);
    bindFunc(glTexCoord2i)("glTexCoord2i", lib);
    bindFunc(glTexCoord2s)("glTexCoord2s", lib);
    bindFunc(glTexCoord3d)("glTexCoord3d", lib);
    bindFunc(glTexCoord3f)("glTexCoord3f", lib);
    bindFunc(glTexCoord3i)("glTexCoord3i", lib);
    bindFunc(glTexCoord3s)("glTexCoord3s", lib);
    bindFunc(glTexCoord4d)("glTexCoord4d", lib);
    bindFunc(glTexCoord4f)("glTexCoord4f", lib);
    bindFunc(glTexCoord4i)("glTexCoord4i", lib);
    bindFunc(glTexCoord4s)("glTexCoord4s", lib);
    bindFunc(glTexCoord1dv)("glTexCoord1dv", lib);
    bindFunc(glTexCoord1fv)("glTexCoord1fv", lib);
    bindFunc(glTexCoord1iv)("glTexCoord1iv", lib);
    bindFunc(glTexCoord1sv)("glTexCoord1sv", lib);
    bindFunc(glTexCoord2dv)("glTexCoord2dv", lib);
    bindFunc(glTexCoord2fv)("glTexCoord2fv", lib);
    bindFunc(glTexCoord2iv)("glTexCoord2iv", lib);
    bindFunc(glTexCoord2sv)("glTexCoord2sv", lib);
    bindFunc(glTexCoord3dv)("glTexCoord3dv", lib);
    bindFunc(glTexCoord3fv)("glTexCoord3fv", lib);
    bindFunc(glTexCoord3iv)("glTexCoord3iv", lib);
    bindFunc(glTexCoord3sv)("glTexCoord3sv", lib);
    bindFunc(glTexCoord4dv)("glTexCoord4dv", lib);
    bindFunc(glTexCoord4fv)("glTexCoord4fv", lib);
    bindFunc(glTexCoord4iv)("glTexCoord4iv", lib);
    bindFunc(glTexCoord4sv)("glTexCoord4sv", lib);
    bindFunc(glRasterPos2d)("glRasterPos2d", lib);
    bindFunc(glRasterPos2f)("glRasterPos2f", lib);
    bindFunc(glRasterPos2i)("glRasterPos2i", lib);
    bindFunc(glRasterPos2s)("glRasterPos2s", lib);
    bindFunc(glRasterPos3d)("glRasterPos3d", lib);
    bindFunc(glRasterPos3f)("glRasterPos3f", lib);
    bindFunc(glRasterPos3i)("glRasterPos3i", lib);
    bindFunc(glRasterPos3s)("glRasterPos3s", lib);
    bindFunc(glRasterPos4d)("glRasterPos4d", lib);
    bindFunc(glRasterPos4f)("glRasterPos4f", lib);
    bindFunc(glRasterPos4i)("glRasterPos4i", lib);
    bindFunc(glRasterPos4s)("glRasterPos4s", lib);
    bindFunc(glRasterPos2dv)("glRasterPos2dv", lib);
    bindFunc(glRasterPos2fv)("glRasterPos2fv", lib);
    bindFunc(glRasterPos2iv)("glRasterPos2iv", lib);
    bindFunc(glRasterPos2sv)("glRasterPos2sv", lib);
    bindFunc(glRasterPos3dv)("glRasterPos3dv", lib);
    bindFunc(glRasterPos3fv)("glRasterPos3fv", lib);
    bindFunc(glRasterPos3iv)("glRasterPos3iv", lib);
    bindFunc(glRasterPos3sv)("glRasterPos3sv", lib);
    bindFunc(glRasterPos4dv)("glRasterPos4dv", lib);
    bindFunc(glRasterPos4fv)("glRasterPos4fv", lib);
    bindFunc(glRasterPos4iv)("glRasterPos4iv", lib);
    bindFunc(glRasterPos4sv)("glRasterPos4sv", lib);
    bindFunc(glRectd)("glRectd", lib);
    bindFunc(glRectf)("glRectf", lib);
    bindFunc(glRecti)("glRecti", lib);
    bindFunc(glRects)("glRects", lib);
    bindFunc(glRectdv)("glRectdv", lib);
    bindFunc(glRectfv)("glRectfv", lib);
    bindFunc(glRectiv)("glRectiv", lib);
    bindFunc(glRectsv)("glRectsv", lib);
    bindFunc(glShadeModel)("glShadeModel", lib);
    bindFunc(glLightf)("glLightf", lib);
    bindFunc(glLighti)("glLighti", lib);
    bindFunc(glLightfv)("glLightfv", lib);
    bindFunc(glLightiv)("glLightiv", lib);
    bindFunc(glGetLightfv)("glGetLightfv", lib);
    bindFunc(glGetLightiv)("glGetLightiv", lib);
    bindFunc(glLightModelf)("glLightModelf", lib);
    bindFunc(glLightModeli)("glLightModeli", lib);
    bindFunc(glLightModelfv)("glLightModelfv", lib);
    bindFunc(glLightModeliv)("glLightModeliv", lib);
    bindFunc(glMaterialf)("glMaterialf", lib);
    bindFunc(glMateriali)("glMateriali", lib);
    bindFunc(glMaterialfv)("glMaterialfv", lib);
    bindFunc(glMaterialiv)("glMaterialiv", lib);
    bindFunc(glGetMaterialfv)("glGetMaterialfv", lib);
    bindFunc(glGetMaterialiv)("glGetMaterialiv", lib);
    bindFunc(glColorMaterial)("glColorMaterial", lib);
    bindFunc(glPixelZoom)("glPixelZoom", lib);
    bindFunc(glPixelStoref)("glPixelStoref", lib);
    bindFunc(glPixelStorei)("glPixelStorei", lib);
    bindFunc(glPixelTransferf)("glPixelTransferf", lib);
    bindFunc(glPixelTransferi)("glPixelTransferi", lib);
    bindFunc(glPixelMapfv)("glPixelMapfv", lib);
    bindFunc(glPixelMapuiv)("glPixelMapuiv", lib);
    bindFunc(glPixelMapusv)("glPixelMapusv", lib);
    bindFunc(glGetPixelMapfv)("glGetPixelMapfv", lib);
    bindFunc(glGetPixelMapuiv)("glGetPixelMapuiv", lib);
    bindFunc(glGetPixelMapusv)("glGetPixelMapusv", lib);
    bindFunc(glBitmap)("glBitmap", lib);
    bindFunc(glReadPixels)("glReadPixels", lib);
    bindFunc(glDrawPixels)("glDrawPixels", lib);
    bindFunc(glCopyPixels)("glCopyPixels", lib);
    bindFunc(glStencilFunc)("glStencilFunc", lib);
    bindFunc(glStencilMask)("glStencilMask", lib);
    bindFunc(glStencilOp)("glStencilOp", lib);
    bindFunc(glClearStencil)("glClearStencil", lib);
    bindFunc(glTexGend)("glTexGend", lib);
    bindFunc(glTexGenf)("glTexGenf", lib);
    bindFunc(glTexGeni)("glTexGeni", lib);
    bindFunc(glTexGendv)("glTexGendv", lib);
    bindFunc(glTexGenfv)("glTexGenfv", lib);
    bindFunc(glTexGeniv)("glTexGeniv", lib);
    bindFunc(glTexEnvf)("glTexEnvf", lib);
    bindFunc(glTexEnvi)("glTexEnvi", lib);
    bindFunc(glTexEnvfv)("glTexEnvfv", lib);
    bindFunc(glTexEnviv)("glTexEnviv", lib);
    bindFunc(glGetTexEnvfv)("glGetTexEnvfv", lib);
    bindFunc(glGetTexEnviv)("glGetTexEnviv", lib);
    bindFunc(glTexParameterf)("glTexParameterf", lib);
    bindFunc(glTexParameteri)("glTexParameteri", lib);
    bindFunc(glTexParameterfv)("glTexParameterfv", lib);
    bindFunc(glTexParameteriv)("glTexParameteriv", lib);
    bindFunc(glGetTexParameterfv)("glGetTexParameterfv", lib);
    bindFunc(glGetTexParameteriv)("glGetTexParameteriv", lib);
    bindFunc(glGetTexLevelParameterfv)("glGetTexLevelParameterfv", lib);
    bindFunc(glGetTexLevelParameteriv)("glGetTexLevelParameteriv", lib);
    bindFunc(glTexImage1D)("glTexImage1D", lib);
    bindFunc(glTexImage2D)("glTexImage2D", lib);
    bindFunc(glGetTexImage)("glGetTexImage", lib);
    bindFunc(glMap1d)("glMap1d", lib);
    bindFunc(glMap1f)("glMap1f", lib);
    bindFunc(glMap2d)("glMap2d", lib);
    bindFunc(glMap2f)("glMap2f", lib);
    bindFunc(glGetMapdv)("glGetMapdv", lib);
    bindFunc(glGetMapfv)("glGetMapfv", lib);
    bindFunc(glEvalCoord1d)("glEvalCoord1d", lib);
    bindFunc(glEvalCoord1f)("glEvalCoord1f", lib);
    bindFunc(glEvalCoord1dv)("glEvalCoord1dv", lib);
    bindFunc(glEvalCoord1fv)("glEvalCoord1fv", lib);
    bindFunc(glEvalCoord2d)("glEvalCoord2d", lib);
    bindFunc(glEvalCoord2f)("glEvalCoord2f", lib);
    bindFunc(glEvalCoord2dv)("glEvalCoord2dv", lib);
    bindFunc(glEvalCoord2fv)("glEvalCoord2fv", lib);
    bindFunc(glMapGrid1d)("glMapGrid1d", lib);
    bindFunc(glMapGrid1f)("glMapGrid1f", lib);
    bindFunc(glMapGrid2d)("glMapGrid2d", lib);
    bindFunc(glMapGrid2f)("glMapGrid2f", lib);
    bindFunc(glEvalPoint1)("glEvalPoint1", lib);
    bindFunc(glEvalPoint2)("glEvalPoint2", lib);
    bindFunc(glEvalMesh1)("glEvalMesh1", lib);
    bindFunc(glEvalMesh2)("glEvalMesh2", lib);
    bindFunc(glFogf)("glFogf", lib);
    bindFunc(glFogi)("glFogi", lib);
    bindFunc(glFogfv)("glFogfv", lib);
    bindFunc(glFogiv)("glFogiv", lib);
    bindFunc(glFeedbackBuffer)("glFeedbackBuffer", lib);
    bindFunc(glPassThrough)("glPassThrough", lib);
    bindFunc(glSelectBuffer)("glSelectBuffer", lib);
    bindFunc(glInitNames)("glInitNames", lib);
    bindFunc(glLoadName)("glLoadName", lib);
    bindFunc(glPushName)("glPushName", lib);
    bindFunc(glPopName)("glPopName", lib);
    // gl 1.1
    bindFunc(glGenTextures)("glGenTextures", lib);
    bindFunc(glDeleteTextures)("glDeleteTextures", lib);
    bindFunc(glBindTexture)("glBindTexture", lib);
    bindFunc(glPrioritizeTextures)("glPrioritizeTextures", lib);
    bindFunc(glAreTexturesResident)("glAreTexturesResident", lib);
    bindFunc(glIsTexture)("glIsTexture", lib);
    bindFunc(glTexSubImage1D)("glTexSubImage1D", lib);
    bindFunc(glTexSubImage2D)("glTexSubImage2D", lib);
    bindFunc(glCopyTexImage1D)("glCopyTexImage1D", lib);
    bindFunc(glCopyTexImage2D)("glCopyTexImage2D", lib);
    bindFunc(glCopyTexSubImage1D)("glCopyTexSubImage1D", lib);
    bindFunc(glCopyTexSubImage2D)("glCopyTexSubImage2D", lib);
    bindFunc(glVertexPointer)("glVertexPointer", lib);
    bindFunc(glNormalPointer)("glNormalPointer", lib);
    bindFunc(glColorPointer)("glColorPointer", lib);
    bindFunc(glIndexPointer)("glIndexPointer", lib);
    bindFunc(glTexCoordPointer)("glTexCoordPointer", lib);
    bindFunc(glEdgeFlagPointer)("glEdgeFlagPointer", lib);
    bindFunc(glGetPointerv)("glGetPointerv", lib);
    bindFunc(glArrayElement)("glArrayElement", lib);
    bindFunc(glDrawArrays)("glDrawArrays", lib);
    bindFunc(glDrawElements)("glDrawElements", lib);
    bindFunc(glInterleavedArrays)("glInterleavedArrays", lib);
}

version(Windows)
    extern(Windows):
else
    extern(C):

// Miscellaneous
typedef void function(GLfloat c) pfglClearIndex;
typedef void function(GLclampf,GLclampf,GLclampf,GLclampf) pfglClearColor;
typedef void function(GLbitfield) pfglClear;
typedef void function(GLuint) pfglIndexMask;
typedef void function(GLboolean,GLboolean,GLboolean,GLboolean) pfglColorMask;
typedef void function(GLenum,GLclampf) pfglAlphaFunc;
typedef void function(GLenum,GLenum) pfglBlendFunc;
typedef void function(GLenum) pfglLogicOp;
typedef void function(GLenum) pfglCullFace;
typedef void function(GLenum) pfglFrontFace;
typedef void function(GLfloat) pfglPointSize;
typedef void function(GLfloat) pfglLineWidth;
typedef void function(GLint,GLushort) pfglLineStipple;
typedef void function(GLenum,GLenum) pfglPolygonMode;
typedef void function(GLfloat,GLfloat) pfglPolygonOffset;
typedef void function(GLubyte*) pfglPolygonStipple;
typedef void function(GLubyte*) pfglGetPolygonStipple;
typedef void function(GLboolean) pfglEdgeFlag;
typedef void function(GLboolean*)pfglEdgeFlagv;
typedef void function(GLint,GLint,GLsizei,GLsizei) pfglScissor;
typedef void function(GLenum,GLdouble*) pfglClipPlane;
typedef void function(GLenum,GLdouble*) pfglGetClipPlane;
typedef void function(GLenum) pfglDrawBuffer;
typedef void function(GLenum) pfglReadBuffer;
typedef void function(GLenum) pfglEnable;
typedef void function(GLenum) pfglDisable;
typedef GLboolean function(GLenum) pfglIsEnabled;
typedef void function(GLenum) pfglEnableClientState;
typedef void function(GLenum) pfglDisableClientState;
typedef void function(GLenum,GLboolean*) pfglGetBooleanv;
typedef void function(GLenum,GLdouble*) pfglGetDoublev;
typedef void function(GLenum,GLfloat*) pfglGetFloatv;
typedef void function(GLenum,GLint*) pfglGetIntegerv;
typedef void function(GLbitfield) pfglPushAttrib;
typedef void function() pfglPopAttrib;
typedef void function(GLbitfield) pfglPushClientAttrib;
typedef void function() pfglPopClientAttrib;
typedef GLint function(GLenum) pfglRenderMode;
typedef GLenum function() pfglGetError;
typedef GLchar* function(GLenum) pfglGetString;
typedef void function() pfglFinish;
typedef void function() pfglFlush;
typedef void function(GLenum,GLenum) pfglHint;
pfglClearIndex          glClearIndex;
pfglClearColor          glClearColor;
pfglClear               glClear;
pfglIndexMask           glIndexMask;
pfglColorMask           glColorMask;
pfglAlphaFunc           glAlphaFunc;
pfglBlendFunc           glBlendFunc;
pfglLogicOp             glLogicOp;
pfglCullFace            glCullFace;
pfglFrontFace           glFrontFace;
pfglPointSize           glPointSize;
pfglLineWidth           glLineWidth;
pfglLineStipple         glLineStipple;
pfglPolygonMode         glPolygonMode;
pfglPolygonOffset       glPolygonOffset;
pfglPolygonStipple      glPolygonStipple;
pfglGetPolygonStipple   glGetPolygonStipple;
pfglEdgeFlag            glEdgeFlag;
pfglEdgeFlagv           glEdgeFlagv;
pfglScissor             glScissor;
pfglClipPlane           glClipPlane;
pfglGetClipPlane        glGetClipPlane;
pfglDrawBuffer          glDrawBuffer;
pfglReadBuffer          glReadBuffer;
pfglEnable              glEnable;
pfglDisable             glDisable;
pfglIsEnabled           glIsEnabled;
pfglEnableClientState   glEnableClientState;
pfglDisableClientState  glDisableClientState;
pfglGetBooleanv         glGetBooleanv;
pfglGetDoublev          glGetDoublev;
pfglGetFloatv           glGetFloatv;
pfglGetIntegerv         glGetIntegerv;
pfglPushAttrib          glPushAttrib;
pfglPopAttrib           glPopAttrib;
pfglPushClientAttrib    glPushClientAttrib;
pfglPopClientAttrib     glPopClientAttrib;
pfglRenderMode          glRenderMode;
pfglGetError            glGetError;
pfglGetString           glGetString;
pfglFinish              glFinish;
pfglFlush               glFlush;
pfglHint                glHint;

// Depth Buffer
typedef void function(GLclampd) pfglClearDepth;
typedef void function(GLenum) pfglDepthFunc;
typedef void function(GLboolean) pfglDepthMask;
typedef void function(GLclampd,GLclampd) pfglDepthRange;
pfglClearDepth          glClearDepth;
pfglDepthFunc           glDepthFunc;
pfglDepthMask           glDepthMask;
pfglDepthRange          glDepthRange;

// Accumulation Buffer
typedef void function(GLfloat,GLfloat,GLfloat,GLfloat) pfglClearAccum;
typedef void function(GLenum,GLfloat) pfglAccum;
pfglClearAccum glClearAccum;
pfglAccum glAccum;

// Transformation
typedef void function(GLenum) pfglMatrixMode;
typedef void function(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble) pfglOrtho;
typedef void function(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble) pfglFrustum;
typedef void function(GLint,GLint,GLsizei,GLsizei) pfglViewport;
typedef void function() pfglPushMatrix;
typedef void function() pfglPopMatrix;
typedef void function() pfglLoadIdentity;
typedef void function(GLdouble*) pfglLoadMatrixd;
typedef void function(GLfloat*) pfglLoadMatrixf;
typedef void function(GLdouble*) pfglMultMatrixd;
typedef void function(GLfloat*) pfglMultMatrixf;
typedef void function(GLdouble,GLdouble,GLdouble,GLdouble) pfglRotated;
typedef void function(GLfloat,GLfloat,GLfloat,GLfloat) pfglRotatef;
typedef void function(GLdouble,GLdouble,GLdouble) pfglScaled;
typedef void function(GLfloat,GLfloat,GLfloat) pfglScalef;
typedef void function(GLdouble,GLdouble,GLdouble) pfglTranslated;
typedef void function(GLfloat,GLfloat,GLfloat) pfglTranslatef;
pfglMatrixMode          glMatrixMode;
pfglOrtho               glOrtho;
pfglFrustum             glFrustum;
pfglViewport            glViewport;
pfglPushMatrix          glPushMatrix;
pfglPopMatrix           glPopMatrix;
pfglLoadIdentity        glLoadIdentity;
pfglLoadMatrixd         glLoadMatrixd;
pfglLoadMatrixf         glLoadMatrixf;
pfglMultMatrixd         glMultMatrixd;
pfglMultMatrixf         glMultMatrixf;
pfglRotated             glRotated;
pfglRotatef             glRotatef;
pfglScaled              glScaled;
pfglScalef              glScalef;
pfglTranslated          glTranslated;
pfglTranslatef          glTranslatef;

// Display Lists
typedef GLboolean function(GLuint) pfglIsList;
typedef void function(GLuint,GLsizei) pfglDeleteLists;
typedef GLuint function(GLsizei) pfglGenLists;
typedef void function(GLuint,GLenum) pfglNewList;
typedef void function() pfglEndList;
typedef void function(GLuint) pfglCallList;
typedef void function(GLsizei,GLenum,GLvoid*) pfglCallLists;
typedef void function(GLuint) pfglListBase;
pfglIsList              glIsList;
pfglDeleteLists         glDeleteLists;
pfglGenLists            glGenLists;
pfglNewList             glNewList;
pfglEndList             glEndList;
pfglCallList            glCallList;
pfglCallLists           glCallLists;
pfglListBase            glListBase;

// Drawing Functions
typedef void function(GLenum) pfglBegin;
typedef void function() pfglEnd;
typedef void function(GLdouble,GLdouble) pfglVertex2d;
typedef void function(GLfloat,GLfloat) pfglVertex2f;
typedef void function(GLint,GLint) pfglVertex2i;
typedef void function(GLshort,GLshort) pfglVertex2s;
typedef void function(GLdouble,GLdouble,GLdouble) pfglVertex3d;
typedef void function(GLfloat,GLfloat,GLfloat) pfglVertex3f;
typedef void function(GLint,GLint,GLint) pfglVertex3i;
typedef void function(GLshort,GLshort,GLshort) pfglVertex3s;
typedef void function(GLdouble,GLdouble,GLdouble,GLdouble) pfglVertex4d;
typedef void function(GLfloat,GLfloat,GLfloat,GLfloat) pfglVertex4f;
typedef void function(GLint,GLint,GLint,GLint) pfglVertex4i;
typedef void function(GLshort,GLshort,GLshort,GLshort) pfglVertex4s;
typedef void function(GLdouble*) pfglVertex2dv;
typedef void function(GLfloat*) pfglVertex2fv;
typedef void function(GLint*) pfglVertex2iv;
typedef void function(GLshort*) pfglVertex2sv;
typedef void function(GLdouble*) pfglVertex3dv;
typedef void function(GLfloat*) pfglVertex3fv;
typedef void function(GLint*) pfglVertex3iv;
typedef void function(GLshort*) pfglVertex3sv;
typedef void function(GLdouble*) pfglVertex4dv;
typedef void function(GLfloat*) pfglVertex4fv;
typedef void function(GLint*) pfglVertex4iv;
typedef void function(GLshort*) pfglVertex4sv;
typedef void function(GLbyte,GLbyte,GLbyte) pfglNormal3b;
typedef void function(GLdouble,GLdouble,GLdouble) pfglNormal3d;
typedef void function(GLfloat,GLfloat,GLfloat) pfglNormal3f;
typedef void function(GLint,GLint,GLint) pfglNormal3i;
typedef void function(GLshort,GLshort,GLshort) pfglNormal3s;
typedef void function(GLbyte*) pfglNormal3bv;
typedef void function(GLdouble*) pfglNormal3dv;
typedef void function(GLfloat*) pfglNormal3fv;
typedef void function(GLint*) pfglNormal3iv;
typedef void function(GLshort*) pfglNormal3sv;
typedef void function(GLdouble) pfglIndexd;
typedef void function(GLfloat) pfglIndexf;
typedef void function(GLint) pfglIndexi;
typedef void function(GLshort) pfglIndexs;
typedef void function(GLubyte) pfglIndexub;
typedef void function(GLdouble*) pfglIndexdv;
typedef void function(GLfloat*) pfglIndexfv;
typedef void function(GLint*) pfglIndexiv;
typedef void function(GLshort*) pfglIndexsv;
typedef void function(GLubyte*) pfglIndexubv;
typedef void function(GLbyte,GLbyte,GLbyte) pfglColor3b;
typedef void function(GLdouble,GLdouble,GLdouble) pfglColor3d;
typedef void function(GLfloat,GLfloat,GLfloat) pfglColor3f;
typedef void function(GLint,GLint,GLint) pfglColor3i;
typedef void function(GLshort,GLshort,GLshort) pfglColor3s;
typedef void function(GLubyte,GLubyte,GLubyte) pfglColor3ub;
typedef void function(GLuint,GLuint,GLuint) pfglColor3ui;
typedef void function(GLushort,GLushort,GLushort) pfglColor3us;
typedef void function(GLbyte,GLbyte,GLbyte,GLbyte) pfglColor4b;
typedef void function(GLdouble,GLdouble,GLdouble,GLdouble) pfglColor4d;
typedef void function(GLfloat,GLfloat,GLfloat,GLfloat) pfglColor4f;
typedef void function(GLint,GLint,GLint,GLint) pfglColor4i;
typedef void function(GLshort,GLshort,GLshort,GLshort) pfglColor4s;
typedef void function(GLubyte,GLubyte,GLubyte,GLubyte) pfglColor4ub;
typedef void function(GLuint,GLuint,GLuint,GLuint) pfglColor4ui;
typedef void function(GLushort,GLushort,GLushort,GLushort) pfglColor4us;
typedef void function(GLubyte*) pfglColor3bv;
typedef void function(GLdouble*) pfglColor3dv;
typedef void function(GLfloat*) pfglColor3fv;
typedef void function(GLint*) pfglColor3iv;
typedef void function(GLshort*) pfglColor3sv;
typedef void function(GLubyte*) pfglColor3ubv;
typedef void function(GLuint*) pfglColor3uiv;
typedef void function(GLushort*) pfglColor3usv;
typedef void function(GLbyte*) pfglColor4bv;
typedef void function(GLdouble*) pfglColor4dv;
typedef void function(GLfloat*) pfglColor4fv;
typedef void function(GLint*) pfglColor4iv;
typedef void function(GLshort*) pfglColor4sv;
typedef void function(GLubyte*) pfglColor4ubv;
typedef void function(GLuint*) pfglColor4uiv;
typedef void function(GLushort) pfglColor4usv;
typedef void function(GLdouble) pfglTexCoord1d;
typedef void function(GLfloat) pfglTexCoord1f;
typedef void function(GLint) pfglTexCoord1i;
typedef void function(GLshort) pfglTexCoord1s;
typedef void function(GLdouble,GLdouble) pfglTexCoord2d;
typedef void function(GLfloat,GLfloat) pfglTexCoord2f;
typedef void function(GLint,GLint) pfglTexCoord2i;
typedef void function(GLshort,GLshort) pfglTexCoord2s;
typedef void function(GLdouble,GLdouble,GLdouble) pfglTexCoord3d;
typedef void function(GLfloat,GLfloat,GLfloat) pfglTexCoord3f;
typedef void function(GLint,GLint,GLint) pfglTexCoord3i;
typedef void function(GLshort,GLshort,GLshort) pfglTexCoord3s;
typedef void function(GLdouble,GLdouble,GLdouble,GLdouble) pfglTexCoord4d;
typedef void function(GLfloat,GLfloat,GLfloat,GLfloat) pfglTexCoord4f;
typedef void function(GLint,GLint,GLint,GLint) pfglTexCoord4i;
typedef void function(GLshort,GLshort,GLshort,GLshort) pfglTexCoord4s;
typedef void function(GLdouble*) pfglTexCoord1dv;
typedef void function(GLfloat*) pfglTexCoord1fv;
typedef void function(GLint*) pfglTexCoord1iv;
typedef void function(GLshort*) pfglTexCoord1sv;
typedef void function(GLdouble*) pfglTexCoord2dv;
typedef void function(GLfloat*) pfglTexCoord2fv;
typedef void function(GLint*) pfglTexCoord2iv;
typedef void function(GLshort*) pfglTexCoord2sv;
typedef void function(GLdouble*) pfglTexCoord3dv;
typedef void function(GLfloat*) pfglTexCoord3fv;
typedef void function(GLint*) pfglTexCoord3iv;
typedef void function(GLshort*) pfglTexCoord3sv;
typedef void function(GLdouble*) pfglTexCoord4dv;
typedef void function(GLfloat*) pfglTexCoord4fv;
typedef void function(GLint*) pfglTexCoord4iv;
typedef void function(GLshort*) pfglTexCoord4sv;
typedef void function(GLdouble,GLdouble) pfglRasterPos2d;
typedef void function(GLfloat,GLfloat) pfglRasterPos2f;
typedef void function(GLint,GLint) pfglRasterPos2i;
typedef void function(GLshort,GLshort) pfglRasterPos2s;
typedef void function(GLdouble,GLdouble,GLdouble) pfglRasterPos3d;
typedef void function(GLfloat,GLfloat,GLfloat) pfglRasterPos3f;
typedef void function(GLint,GLint,GLint) pfglRasterPos3i;
typedef void function(GLshort,GLshort,GLshort) pfglRasterPos3s;
typedef void function(GLdouble,GLdouble,GLdouble,GLdouble) pfglRasterPos4d;
typedef void function(GLfloat,GLfloat,GLfloat,GLfloat) pfglRasterPos4f;
typedef void function(GLint,GLint,GLint,GLint) pfglRasterPos4i;
typedef void function(GLshort,GLshort,GLshort,GLshort) pfglRasterPos4s;
typedef void function(GLdouble*) pfglRasterPos2dv;
typedef void function(GLfloat*) pfglRasterPos2fv;
typedef void function(GLint*) pfglRasterPos2iv;
typedef void function(GLshort*) pfglRasterPos2sv;
typedef void function(GLdouble*) pfglRasterPos3dv;
typedef void function(GLfloat*) pfglRasterPos3fv;
typedef void function(GLint*) pfglRasterPos3iv;
typedef void function(GLshort*) pfglRasterPos3sv;
typedef void function(GLdouble*) pfglRasterPos4dv;
typedef void function(GLfloat*) pfglRasterPos4fv;
typedef void function(GLint*) pfglRasterPos4iv;
typedef void function(GLshort*) pfglRasterPos4sv;
typedef void function(GLdouble,GLdouble,GLdouble,GLdouble) pfglRectd;
typedef void function(GLfloat,GLfloat,GLfloat,GLfloat) pfglRectf;
typedef void function(GLint,GLint,GLint,GLint) pfglRecti;
typedef void function(GLshort,GLshort,GLshort,GLshort) pfglRects;
typedef void function(GLdouble*) pfglRectdv;
typedef void function(GLfloat*) pfglRectfv;
typedef void function(GLint*) pfglRectiv;
typedef void function(GLshort*) pfglRectsv;
pfglBegin               glBegin;
pfglEnd                 glEnd;
pfglVertex2d            glVertex2d;
pfglVertex2f            glVertex2f;
pfglVertex2i            glVertex2i;
pfglVertex2s            glVertex2s;
pfglVertex3d            glVertex3d;
pfglVertex3f            glVertex3f;
pfglVertex3i            glVertex3i;
pfglVertex3s            glVertex3s;
pfglVertex4d            glVertex4d;
pfglVertex4f            glVertex4f;
pfglVertex4i            glVertex4i;
pfglVertex4s            glVertex4s;
pfglVertex2dv           glVertex2dv;
pfglVertex2fv           glVertex2fv;
pfglVertex2iv           glVertex2iv;
pfglVertex2sv           glVertex2sv;
pfglVertex3dv           glVertex3dv;
pfglVertex3fv           glVertex3fv;
pfglVertex3iv           glVertex3iv;
pfglVertex3sv           glVertex3sv;
pfglVertex4dv           glVertex4dv;
pfglVertex4fv           glVertex4fv;
pfglVertex4iv           glVertex4iv;
pfglVertex4sv           glVertex4sv;
pfglNormal3b            glNormal3b;
pfglNormal3d            glNormal3d;
pfglNormal3f            glNormal3f;
pfglNormal3i            glNormal3i;
pfglNormal3s            glNormal3s;
pfglNormal3bv           glNormal3bv;
pfglNormal3dv           glNormal3dv;
pfglNormal3fv           glNormal3fv;
pfglNormal3iv           glNormal3iv;
pfglNormal3sv           glNormal3sv;
pfglIndexd              glIndexd;
pfglIndexf              glIndexf;
pfglIndexi              glIndexi;
pfglIndexs              glIndexs;
pfglIndexub             glIndexub;
pfglIndexdv             glIndexdv;
pfglIndexfv             glIndexfv;
pfglIndexiv             glIndexiv;
pfglIndexsv             glIndexsv;
pfglIndexubv            glIndexubv;
pfglColor3b             glColor3b;
pfglColor3d             glColor3d;
pfglColor3f             glColor3f;
pfglColor3i             glColor3i;
pfglColor3s             glColor3s;
pfglColor3ub            glColor3ub;
pfglColor3ui            glColor3ui;
pfglColor3us            glColor3us;
pfglColor4b             glColor4b;
pfglColor4d             glColor4d;
pfglColor4f             glColor4f;
pfglColor4i             glColor4i;
pfglColor4s             glColor4s;
pfglColor4ub            glColor4ub;
pfglColor4ui            glColor4ui;
pfglColor4us            glColor4us;
pfglColor3bv            glColor3bv;
pfglColor3dv            glColor3dv;
pfglColor3fv            glColor3fv;
pfglColor3iv            glColor3iv;
pfglColor3sv            glColor3sv;
pfglColor3ubv           glColor3ubv;
pfglColor3uiv           glColor3uiv;
pfglColor3usv           glColor3usv;
pfglColor4bv            glColor4bv;
pfglColor4dv            glColor4dv;
pfglColor4fv            glColor4fv;
pfglColor4iv            glColor4iv;
pfglColor4sv            glColor4sv;
pfglColor4ubv           glColor4ubv;
pfglColor4uiv           glColor4uiv;
pfglColor4usv           glColor4usv;
pfglTexCoord1d          glTexCoord1d;
pfglTexCoord1f          glTexCoord1f;
pfglTexCoord1i          glTexCoord1i;
pfglTexCoord1s          glTexCoord1s;
pfglTexCoord2d          glTexCoord2d;
pfglTexCoord2f          glTexCoord2f;
pfglTexCoord2i          glTexCoord2i;
pfglTexCoord2s          glTexCoord2s;
pfglTexCoord3d          glTexCoord3d;
pfglTexCoord3f          glTexCoord3f;
pfglTexCoord3i          glTexCoord3i;
pfglTexCoord3s          glTexCoord3s;
pfglTexCoord4d          glTexCoord4d;
pfglTexCoord4f          glTexCoord4f;
pfglTexCoord4i          glTexCoord4i;
pfglTexCoord4s          glTexCoord4s;
pfglTexCoord1dv         glTexCoord1dv;
pfglTexCoord1fv         glTexCoord1fv;
pfglTexCoord1iv         glTexCoord1iv;
pfglTexCoord1sv         glTexCoord1sv;
pfglTexCoord2dv         glTexCoord2dv;
pfglTexCoord2fv         glTexCoord2fv;
pfglTexCoord2iv         glTexCoord2iv;
pfglTexCoord2sv         glTexCoord2sv;
pfglTexCoord3dv         glTexCoord3dv;
pfglTexCoord3fv         glTexCoord3fv;
pfglTexCoord3iv         glTexCoord3iv;
pfglTexCoord3sv         glTexCoord3sv;
pfglTexCoord4dv         glTexCoord4dv;
pfglTexCoord4fv         glTexCoord4fv;
pfglTexCoord4iv         glTexCoord4iv;
pfglTexCoord4sv         glTexCoord4sv;
pfglRasterPos2d         glRasterPos2d;
pfglRasterPos2f         glRasterPos2f;
pfglRasterPos2i         glRasterPos2i;
pfglRasterPos2s         glRasterPos2s;
pfglRasterPos3d         glRasterPos3d;
pfglRasterPos3f         glRasterPos3f;
pfglRasterPos3i         glRasterPos3i;
pfglRasterPos3s         glRasterPos3s;
pfglRasterPos4d         glRasterPos4d;
pfglRasterPos4f         glRasterPos4f;
pfglRasterPos4i         glRasterPos4i;
pfglRasterPos4s         glRasterPos4s;
pfglRasterPos2dv        glRasterPos2dv;
pfglRasterPos2fv        glRasterPos2fv;
pfglRasterPos2iv        glRasterPos2iv;
pfglRasterPos2sv        glRasterPos2sv;
pfglRasterPos3dv        glRasterPos3dv;
pfglRasterPos3fv        glRasterPos3fv;
pfglRasterPos3iv        glRasterPos3iv;
pfglRasterPos3sv        glRasterPos3sv;
pfglRasterPos4dv        glRasterPos4dv;
pfglRasterPos4fv        glRasterPos4fv;
pfglRasterPos4iv        glRasterPos4iv;
pfglRasterPos4sv        glRasterPos4sv;
pfglRectd               glRectd;
pfglRectf               glRectf;
pfglRecti               glRecti;
pfglRects               glRects;
pfglRectdv              glRectdv;
pfglRectfv              glRectfv;
pfglRectiv              glRectiv;
pfglRectsv              glRectsv;

// Lighting
typedef void function(GLenum) pfglShadeModel;
typedef void function(GLenum,GLenum,GLfloat) pfglLightf;
typedef void function(GLenum,GLenum,GLint) pfglLighti;
typedef void function(GLenum,GLenum,GLfloat*) pfglLightfv;
typedef void function(GLenum,GLenum,GLint*) pfglLightiv;
typedef void function(GLenum,GLenum,GLfloat*) pfglGetLightfv;
typedef void function(GLenum,GLenum,GLint*) pfglGetLightiv;
typedef void function(GLenum,GLfloat) pfglLightModelf;
typedef void function(GLenum,GLint) pfglLightModeli;
typedef void function(GLenum,GLfloat*) pfglLightModelfv;
typedef void function(GLenum,GLint*) pfglLightModeliv;
typedef void function(GLenum,GLenum,GLfloat) pfglMaterialf;
typedef void function(GLenum,GLenum,GLint) pfglMateriali;
typedef void function(GLenum,GLenum,GLfloat*) pfglMaterialfv;
typedef void function(GLenum,GLenum,GLint*) pfglMaterialiv;
typedef void function(GLenum,GLenum,GLfloat*) pfglGetMaterialfv;
typedef void function(GLenum,GLenum,GLint*) pfglGetMaterialiv;
typedef void function(GLenum,GLenum) pfglColorMaterial;
pfglShadeModel              glShadeModel;
pfglLightf                  glLightf;
pfglLighti                  glLighti;
pfglLightfv                 glLightfv;
pfglLightiv                 glLightiv;
pfglGetLightfv              glGetLightfv;
pfglGetLightiv              glGetLightiv;
pfglLightModelf             glLightModelf;
pfglLightModeli             glLightModeli;
pfglLightModelfv            glLightModelfv;
pfglLightModeliv            glLightModeliv;
pfglMaterialf               glMaterialf;
pfglMateriali               glMateriali;
pfglMaterialfv              glMaterialfv;
pfglMaterialiv              glMaterialiv;
pfglGetMaterialfv           glGetMaterialfv;
pfglGetMaterialiv           glGetMaterialiv;
pfglColorMaterial           glColorMaterial;

// Raster functions
typedef void function(GLfloat,GLfloat) pfglPixelZoom;
typedef void function(GLenum,GLfloat) pfglPixelStoref;
typedef void function(GLenum,GLint) pfglPixelStorei;
typedef void function(GLenum,GLfloat) pfglPixelTransferf;
typedef void function(GLenum,GLint) pfglPixelTransferi;
typedef void function(GLenum,GLint,GLfloat*) pfglPixelMapfv;
typedef void function(GLenum,GLint,GLuint*) pfglPixelMapuiv;
typedef void function(GLenum,GLint,GLushort*) pfglPixelMapusv;
typedef void function(GLenum,GLfloat*) pfglGetPixelMapfv;
typedef void function(GLenum,GLuint*) pfglGetPixelMapuiv;
typedef void function(GLenum,GLushort*) pfglGetPixelMapusv;
typedef void function(GLsizei,GLsizei,GLfloat,GLfloat,GLfloat,GLfloat,GLubyte*) pfglBitmap;
typedef void function(GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,GLvoid*) pfglReadPixels;
typedef void function(GLsizei,GLsizei,GLenum,GLenum,GLvoid*) pfglDrawPixels;
typedef void function(GLint,GLint,GLsizei,GLsizei,GLenum) pfglCopyPixels;
pfglPixelZoom           glPixelZoom;
pfglPixelStoref         glPixelStoref;
pfglPixelStorei         glPixelStorei;
pfglPixelTransferf      glPixelTransferf;
pfglPixelTransferi      glPixelTransferi;
pfglPixelMapfv          glPixelMapfv;
pfglPixelMapuiv         glPixelMapuiv;
pfglPixelMapusv         glPixelMapusv;
pfglGetPixelMapfv       glGetPixelMapfv;
pfglGetPixelMapuiv      glGetPixelMapuiv;
pfglGetPixelMapusv      glGetPixelMapusv;
pfglBitmap              glBitmap;
pfglReadPixels          glReadPixels;
pfglDrawPixels          glDrawPixels;
pfglCopyPixels          glCopyPixels;

// Stenciling
typedef void function(GLenum,GLint,GLuint) pfglStencilFunc;
typedef void function(GLuint) pfglStencilMask;
typedef void function(GLenum,GLenum,GLenum) pfglStencilOp;
typedef void function(GLint) pfglClearStencil;
pfglStencilFunc         glStencilFunc;
pfglStencilMask         glStencilMask;
pfglStencilOp           glStencilOp;
pfglClearStencil        glClearStencil;

// Texture mapping
typedef void function(GLenum,GLenum,GLdouble) pfglTexGend;
typedef void function(GLenum,GLenum,GLfloat) pfglTexGenf;
typedef void function(GLenum,GLenum,GLint) pfglTexGeni;
typedef void function(GLenum,GLenum,GLdouble*) pfglTexGendv;
typedef void function(GLenum,GLenum,GLfloat*) pfglTexGenfv;
typedef void function(GLenum,GLenum,GLint*) pfglTexGeniv;
typedef void function(GLenum,GLenum,GLdouble*) pfglGetTexGendv;
typedef void function(GLenum,GLenum,GLfloat*) pfglGetTexGenfv;
typedef void function(GLenum,GLenum,GLint*) pfglGetTexGeniv;
typedef void function(GLenum,GLenum,GLfloat) pfglTexEnvf;
typedef void function(GLenum,GLenum,GLint) pfglTexEnvi;
typedef void function(GLenum,GLenum,GLfloat*) pfglTexEnvfv;
typedef void function(GLenum,GLenum,GLint*) pfglTexEnviv;
typedef void function(GLenum,GLenum,GLfloat*) pfglGetTexEnvfv;
typedef void function(GLenum,GLenum,GLint*) pfglGetTexEnviv;
typedef void function(GLenum,GLenum,GLfloat) pfglTexParameterf;
typedef void function(GLenum,GLenum,GLint) pfglTexParameteri;
typedef void function(GLenum,GLenum,GLfloat*) pfglTexParameterfv;
typedef void function(GLenum,GLenum,GLint*) pfglTexParameteriv;
typedef void function(GLenum,GLenum,GLfloat*) pfglGetTexParameterfv;
typedef void function(GLenum,GLenum,GLint*) pfglGetTexParameteriv;
typedef void function(GLenum,GLint,GLenum,GLfloat*) pfglGetTexLevelParameterfv;
typedef void function(GLenum,GLint,GLenum,GLint*) pfglGetTexLevelParameteriv;
typedef void function(GLenum,GLint,GLint,GLsizei,GLint,GLenum,GLenum,GLvoid*) pfglTexImage1D;
typedef void function(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLenum,GLenum,GLvoid*) pfglTexImage2D;
typedef void function(GLenum,GLint,GLenum,GLenum,GLvoid*) pfglGetTexImage;
pfglTexGend             glTexGend;
pfglTexGenf             glTexGenf;
pfglTexGeni             glTexGeni;
pfglTexGendv            glTexGendv;
pfglTexGenfv            glTexGenfv;
pfglTexGeniv            glTexGeniv;
pfglGetTexGendv         glGetTexGendv;
pfglGetTexGenfv         glGetTexGenfv;
pfglGetTexGeniv         glGetTexGeniv;
pfglTexEnvf             glTexEnvf;
pfglTexEnvi             glTexEnvi;
pfglTexEnvfv            glTexEnvfv;
pfglTexEnviv            glTexEnviv;
pfglGetTexEnvfv         glGetTexEnvfv;
pfglGetTexEnviv         glGetTexEnviv;
pfglTexParameterf       glTexParameterf;
pfglTexParameteri       glTexParameteri;
pfglTexParameterfv      glTexParameterfv;
pfglTexParameteriv      glTexParameteriv;
pfglGetTexParameterfv   glGetTexParameterfv;
pfglGetTexParameteriv   glGetTexParameteriv;
pfglGetTexLevelParameterfv glGetTexLevelParameterfv;
pfglGetTexLevelParameteriv glGetTexLevelParameteriv;
pfglTexImage1D          glTexImage1D;
pfglTexImage2D          glTexImage2D;
pfglGetTexImage         glGetTexImage;

// Evaluators
typedef void function(GLenum,GLdouble,GLdouble,GLint,GLint,GLdouble*) pfglMap1d;
typedef void function(GLenum,GLfloat,GLfloat,GLint,GLint,GLfloat*) pfglMap1f;
typedef void function(GLenum,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,GLdouble*) pfglMap2d;
typedef void function(GLenum,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,GLfloat*) pfglMap2f;
typedef void function(GLenum,GLenum,GLdouble*) pfglGetMapdv;
typedef void function(GLenum,GLenum,GLfloat*) pfglGetMapfv;
typedef void function(GLenum,GLenum,GLint*) pfglGetMapiv;
typedef void function(GLdouble) pfglEvalCoord1d;
typedef void function(GLfloat) pfglEvalCoord1f;
typedef void function(GLdouble*) pfglEvalCoord1dv;
typedef void function(GLfloat*) pfglEvalCoord1fv;
typedef void function(GLdouble,GLdouble) pfglEvalCoord2d;
typedef void function(GLfloat,GLfloat) pfglEvalCoord2f;
typedef void function(GLdouble*) pfglEvalCoord2dv;
typedef void function(GLfloat*) pfglEvalCoord2fv;
typedef void function(GLint,GLdouble,GLdouble) pfglMapGrid1d;
typedef void function(GLint,GLfloat,GLfloat) pfglMapGrid1f;
typedef void function(GLint,GLdouble,GLdouble,GLint,GLdouble,GLdouble) pfglMapGrid2d;
typedef void function(GLint,GLfloat,GLfloat,GLint,GLfloat,GLfloat) pfglMapGrid2f;
typedef void function(GLint) pfglEvalPoint1;
typedef void function(GLint,GLint) pfglEvalPoint2;
typedef void function(GLenum,GLint,GLint) pfglEvalMesh1;
typedef void function(GLenum,GLint,GLint,GLint,GLint) pfglEvalMesh2;
pfglMap1d               glMap1d;
pfglMap1f               glMap1f;
pfglMap2d               glMap2d;
pfglMap2f               glMap2f;
pfglGetMapdv            glGetMapdv;
pfglGetMapfv            glGetMapfv;
pfglGetMapiv            glGetMapiv;
pfglEvalCoord1d         glEvalCoord1d;
pfglEvalCoord1f         glEvalCoord1f;
pfglEvalCoord1dv        glEvalCoord1dv;
pfglEvalCoord1fv        glEvalCoord1fv;
pfglEvalCoord2d         glEvalCoord2d;
pfglEvalCoord2f         glEvalCoord2f;
pfglEvalCoord2dv        glEvalCoord2dv;
pfglEvalCoord2fv        glEvalCoord2fv;
pfglMapGrid1d           glMapGrid1d;
pfglMapGrid1f           glMapGrid1f;
pfglMapGrid2d           glMapGrid2d;
pfglMapGrid2f           glMapGrid2f;
pfglEvalPoint1          glEvalPoint1;
pfglEvalPoint2          glEvalPoint2;
pfglEvalMesh1           glEvalMesh1;
pfglEvalMesh2           glEvalMesh2;

// Fog
typedef void function(GLenum,GLfloat) pfglFogf;
typedef void function(GLenum,GLint) pfglFogi;
typedef void function(GLenum,GLfloat*) pfglFogfv;
typedef void function(GLenum,GLint*) pfglFogiv;
pfglFogf                glFogf;
pfglFogi                glFogi;
pfglFogfv               glFogfv;
pfglFogiv               glFogiv;

// Selection and Feedback
typedef void function(GLsizei,GLenum,GLfloat*) pfglFeedbackBuffer;
typedef void function(GLfloat) pfglPassThrough;
typedef void function(GLsizei,GLuint*) pfglSelectBuffer;
typedef void function() pfglInitNames;
typedef void function(GLuint) pfglLoadName;
typedef void function(GLuint) pfglPushName;
typedef void function() pfglPopName;
pfglFeedbackBuffer      glFeedbackBuffer;
pfglPassThrough         glPassThrough;
pfglSelectBuffer        glSelectBuffer;
pfglInitNames           glInitNames;
pfglLoadName            glLoadName;
pfglPushName            glPushName;
pfglPopName             glPopName;

// texture objects
typedef void function(GLsizei,GLuint*) pfglGenTextures;
typedef void function(GLsizei,GLuint*) pfglDeleteTextures;
typedef void function(GLenum,GLuint) pfglBindTexture;
typedef void function(GLsizei,GLuint*,GLclampf*) pfglPrioritizeTextures;
typedef GLboolean function(GLsizei,GLuint*,GLboolean*) pfglAreTexturesResident;
typedef GLboolean function(GLuint) pfglIsTexture;
pfglGenTextures         glGenTextures;
pfglDeleteTextures      glDeleteTextures;
pfglBindTexture         glBindTexture;
pfglPrioritizeTextures  glPrioritizeTextures;
pfglAreTexturesResident glAreTexturesResident;
pfglIsTexture           glIsTexture;

// texture mapping
typedef void function(GLenum,GLint,GLint,GLsizei,GLenum,GLenum,GLvoid*) pfglTexSubImage1D;
typedef void function(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,GLvoid*) pfglTexSubImage2D;
typedef void function(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint) pfglCopyTexImage1D;
typedef void function(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint) pfglCopyTexImage2D;
typedef void function(GLenum,GLint,GLint,GLint,GLint,GLsizei) pfglCopyTexSubImage1D;
typedef void function(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei) pfglCopyTexSubImage2D;
pfglTexSubImage1D       glTexSubImage1D;
pfglTexSubImage2D       glTexSubImage2D;
pfglCopyTexImage1D      glCopyTexImage1D;
pfglCopyTexImage2D      glCopyTexImage2D;
pfglCopyTexSubImage1D   glCopyTexSubImage1D;
pfglCopyTexSubImage2D   glCopyTexSubImage2D;

// vertex arrays
typedef void function(GLint,GLenum,GLsizei,GLvoid*) pfglVertexPointer;
typedef void function(GLenum,GLsizei,GLvoid*) pfglNormalPointer;
typedef void function(GLint,GLenum,GLsizei,GLvoid*) pfglColorPointer;
typedef void function(GLenum,GLsizei,GLvoid*) pfglIndexPointer;
typedef void function(GLint,GLenum,GLsizei,GLvoid*) pfglTexCoordPointer;
typedef void function(GLsizei,GLvoid*) pfglEdgeFlagPointer;
typedef void function(GLenum,GLvoid**) pfglGetPointerv;
typedef void function(GLint) pfglArrayElement;
typedef void function(GLenum,GLint,GLsizei) pfglDrawArrays;
typedef void function(GLenum,GLsizei,GLenum,GLvoid*) pfglDrawElements;
typedef void function(GLenum,GLsizei,GLvoid*) pfglInterleavedArrays;
pfglVertexPointer       glVertexPointer;
pfglNormalPointer       glNormalPointer;
pfglColorPointer        glColorPointer;
pfglIndexPointer        glIndexPointer;
pfglTexCoordPointer     glTexCoordPointer;
pfglEdgeFlagPointer     glEdgeFlagPointer;
pfglGetPointerv         glGetPointerv;
pfglArrayElement        glArrayElement;
pfglDrawArrays          glDrawArrays;
pfglDrawElements        glDrawElements;
pfglInterleavedArrays   glInterleavedArrays;
